import {store} from "@/stores/helper.ts";

interface StorageData<T = any> {
    data: T
    expire: number | null
}

export function createLocalStorage(options?: {expire?: number | null}) {
    const DEFAULT_CACHE_TIME = 60 * 60 * 24 * 7

    const {expire} = Object.assign({expire: DEFAULT_CACHE_TIME}, options)

    function set<T = any>(key: string, data: T) {
        const storageData: StorageData<T> = {
            data,
            expire: expire ? new Date().getTime() + expire * 1000 : null
        }

        const json = JSON.stringify(storageData)
        window.localStorage.setItem(key, json)
    }
    function get<T = any>(key: string) {
        const json = window.localStorage.getItem(key) as string
        if(json) {}
        let storageData: StorageData | null = null
        try {
            storageData = JSON.parse(json)
        } catch {

        }

        if(storageData) {
            const {data, expire} = storageData
            if(expire === null || expire >= Date.now()) {
                return data
            }
        }

        remove(key)
        return null
    }

    function remove(key: string) {
        window.localStorage.removeItem(key)
    }

    function clear() {
        window.localStorage.clear()
    }

    return { set, get, remove, clear }
}

export const ll = createLocalStorage()

export const ss = createLocalStorage({expire: null})